-- @owner: opentestcase043
-- @date: 2023/2/17
-- @testpoint: 共享存储下创建函数

--step1：定义函数为sql查询；expect：成功
create function func_add_sql(integer, integer) returns integer as 'select $1 + $2;' language sql immutable returns null on null input;
/

--step2：利用参数名用 pl/pgsql自增一个整数；expect：成功
create or replace function func_increment_plsql(i integer) returns integer as $$ begin return i + 1; end; $$ language plpgsql;
/

--step3：返回record类型；expect：成功
create or replace function func_increment_sql
(i int, out result_1 bigint, out result_2 bigint) returns setof record as
$$
	begin result_1 = i + 1;
	result_2 = i * 10;
	return next;
	end;
$$language plpgsql;
/

--step4：返回一个包含多个输出参数的记录；expect：成功
create function func_dup_sql(in int, out f1 int, out f2 text) as $$ select $1, cast($1 as text) || ' is text' $$ language sql;
/
select * from func_dup_sql(42);

--step5：计算两个整数的和，并返回结果，如果输入为null，则返回null；expect：成功
create function func_add_sql2(num1 integer, num2 integer) return integer as
begin
	return num1 + num2;
end;
/

--step6：修改函数func_add_sql2的执行规则为immutable，即参数不变时返回相同结果；expect：成功
alter function func_add_sql2(integer, integer) immutable;

--step7：将函数func_add_sql2的名称修改为add_two_number；expect：成功
alter function func_add_sql2(integer, integer) rename to add_two_number;

--step8：创建用户omm；expect：创建成功
create user omm password 'test@123';

--step9：将函数add_two_number的属者改为omm；expect：成功
alter function add_two_number(integer, integer) owner to omm;

--step10：清理环境；expect：成功
drop function if exists add_two_number;
drop function if exists func_increment_sql;
drop function if exists func_dup_sql;
drop function if exists func_increment_plsql;
drop function if exists func_add_sql;
drop user omm;